/**
 * 
 */
package com.feib.stms.dao;

import java.util.List;

import org.springframework.dao.DataAccessException;

import com.feib.stms.model.MenuItem;
import com.feib.stms.model.Role;
import com.feib.stms.pagination.PaginatedList;

/**
 * @author Jimmy Liu
 *
 */
public interface MenuItemDao {
	
	/** 根據角色查詢系統功能設定菜單
	 * @param role
	 * @return List<MenuItem>
	 */
	public List<MenuItem> getByRole(Role role);
	
	/** 根據pk查詢系統功能設定菜單
	 * @param menuItemPk
	 * @return MenuItem
	 */
	public MenuItem getByMenuItemPk(Long menuItemPk);
	
	/** 查詢所有啟用的系統功能設定菜單
	 * @return
	 */
	public List<MenuItem> getAllEnabledMenuItems();
	
	/** 查詢所有啟用的系統功能設定菜單(券商可用)
	 * @return
	 */
	public List<MenuItem> getAllEnabledMenuItemsForSecurities();
	
	/**分頁查詢系統功能設定菜單
	 * @param menuItem
	 * @param menuType
	 * @param paginatedList
	 * @return PaginatedList<MenuItem>
	 */
	public PaginatedList<MenuItem> queryForPaginatedListByMenuItem(MenuItem menuItem , String menuType, PaginatedList paginatedList);
	
	/** 上層程式下拉選單列表
	 * @return List<MenuItem>
	 */
	public List<MenuItem> initMenuItemOptionList();
	
	/** 新增系統功能設定
	 * @param menuItem
	 * @return int
	 */
	public int insert(MenuItem menuItem) throws DataAccessException;
	
	/** 更新系統功能設定
	 * @param menuItem
	 * @return int
	 */
	public int update(MenuItem menuItem);
	
	/** 刪除系統功能設定
	 * @param pk
	 * @return int
	 */
	public int delete(Long pk);
	
	/** 獲取父menuItem數量
	 * @param pk
	 * @return int
	 */
	public int countParentMenuItem(Long pk);
	
	/**
	 * 獲取券商可用的menuItem(既IS_SECURITIES=1)
	 * @return List<MenuItem>
	 */
	public List<MenuItem> getSecuritiesMenuItem();
}
